const websocket = require("ws")

const ws = new websocket.Server({//创建端口为8000的websocket服务器
    port:8000 
})

let clinets ={}//28
let clinetNum = 0

ws.on("connection",(client)=>{
    //监听，连接客户端
    //给每个连接的客户端创建一个名字
    client.name = ++clinetNum
    clinets[client.name] = client // "1":client

    //用client实例监听自己发送四个常用事件 open,messaga,error,close
    client.on("message",(msg)=>{//监听客户端message事件，拿到某个客户端发来的消息
        console.log("用户"+client.name+"说："+msg);
        broadcast(client,msg)
    })

    //监听报错事件
    client.on("error",(err)=>{//监听客户端错误事件
        if(err){
            console.log(err);  
        }
    })

    // 监听客户端关闭也就是下线事件
    client.on("close",()=>{//监听客户端错误事件
        broadcastQuite(client)
        console.log("用户"+client.name+"下线了！");
        delete clinets[client.name] // 从容器中删除下线的客户端实例
    })
})

//广播方法
function broadcast(client,msg){//对所有客户端进行广播
    for(let key in clinets){
        clinets[key].send("用户"+client.name+"说："+msg)
    }
}

//广播自己下线了
function broadcastQuite(client){
    for(let key in clinets){
        clinets[key].send("系统提示：用户"+client.name+"下线了！")
    }
}
